home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Demos / A.D. Software / OOFILE 1.3b4d6.sit / OOFILE 1.3b4d6 / MacCodeWarriorDemo1.3b4d6 / docs / samples / ooftst19.cpp < prev    next >
C/C++ Source or Header  |  1997-03-17  |  2KB  |  115 lines

  1. // Copyright 1994 A.D. Software. All Rights Reserved
  2.  
  3. // OOFTEST19
  4.  
  5. // this sample demonstrates using an abstract base class
  6. // and using mixin inheritance
  7.  
  8. // Simple stream I/O is used to interact with the user.
  9. #include "oofile.h"
  10.  
  11. class dbSomeFields
  12. {
  13. public:
  14.     dbChar Recipient;
  15.     dbSomeFields() :
  16.         Recipient(80, "Recipient")
  17.     {};
  18. };
  19.  
  20.  
  21. DECLARE_ABSTRACT_CLASS(dbFileBase)
  22. public:
  23.     dbChar        FileName;
  24.     dbFileBase(const char* tableName) : dbTable(tableName),
  25.         FileName(255, "File Name") 
  26.     {};
  27.     virtual void FormattedName(ostream&)=0;
  28. };
  29.  
  30.  
  31. class dbIncoming : public dbFileBase
  32. {
  33. public:
  34. // as we inherit from other than dbTable,
  35. // must use the following macro instead of DECLARE_CLASS
  36.     OOFILE_METHODS(dbIncoming)
  37.     virtual void FormattedName(ostream&);
  38.     dbIncoming() : dbFileBase("Incoming") {};
  39. };
  40.  
  41.  
  42. class dbOutgoing : public dbFileBase, public dbSomeFields
  43. {
  44. public:
  45. // as we use multiple inheritance, must use the following macro instead of DECLARE_CLASS
  46.     OOFILE_METHODS(dbOutgoing)
  47.     virtual void FormattedName(ostream&);
  48.     dbOutgoing() : dbFileBase("Outgoing"), dbSomeFields() {};
  49. };
  50.  
  51.  
  52. void 
  53. dbIncoming::FormattedName(ostream& os)
  54. {
  55.     os << FileName << endl;
  56. }
  57.  
  58.  
  59. void 
  60. dbOutgoing::FormattedName(ostream& os)
  61. {
  62.     os << FileName << " sent to " << Recipient << endl;
  63. }
  64.  
  65.  
  66. int main()
  67. {
  68.     TEST_CONNECT       theDB;
  69.     dbIncoming             Incoming;
  70.     dbOutgoing            Outgoing;
  71.  
  72.     cout << "OOFILE Validation Suite - Test 19\n"
  73.          << "Simple test to demonstrate inheritance" << endl;
  74.  
  75.     #ifdef TESTING_DBASE
  76.         #ifdef _Macintosh
  77.             const char* kExistsName =  ":ooftst19:Incoming.dbf";
  78.             const char* kDatabaseName = ":ooftst19:";
  79.         #else
  80.             const char* kExistsName =   "Incoming.dbf"
  81.             const char* kDatabaseName = "";
  82.         #endif    
  83.  
  84.     #else
  85.         const char* kDatabaseName = "ooftst19.db";
  86.         const char* kExistsName = kDatabaseName;
  87.     #endif
  88.  
  89.     if (dbConnect::fileExists(kExistsName)) {
  90.         theDB.openConnection(kDatabaseName);
  91.     }
  92.     else {
  93.         theDB.newConnection(kDatabaseName);
  94.         Incoming.newRecord();
  95.         Incoming.FileName = "An Incoming File";
  96.         Incoming.saveRecord();
  97.         
  98.         Outgoing.newRecord();
  99.         Outgoing.FileName = "An Outgoing File";
  100.         Outgoing.Recipient = "XXX";
  101.         Outgoing.saveRecord();
  102.         
  103.     }
  104.  
  105.     cout << "Invoking a virtual function on each in turn" << endl;
  106.     Incoming.FormattedName(cout);
  107.     Outgoing.FormattedName(cout);
  108.  
  109.     cout << endl << "Dumping entire database" << theDB;
  110.     
  111.     cout << "Test Completed" << endl;
  112.  
  113.     return EXIT_SUCCESS;
  114. }
  115.